#ifndef _GLUT_WIN_H_
#define _GLUT_WIN_H_

#include <GL/freeglut.h>
#include <string>

typedef void(*GlutCallbackFunc)(void);

class CGlutWindow
{
    public:
        CGlutWindow(std::string title = "Hello GL") : m_title(title) {}
        ~CGlutWindow() {}

        /**
         * @brief 初始化opengl显示环境
         * @param[in] pargc 对应main函数的argc参数指针
         * @param[in] pargv 对应main函数的argv参数指针
         * @param[in] mode  opengl显示模式
         *      GLUT_RGBA: RGB颜色
         *      GLUT_SINGLE: 单窗口模式 GLUT_DOUBLE: 启用双缓冲
         *      GLUT_DPETH: 启用深度缓冲区
         *      GLUT_MULTISAMPLE: 启用多重采样缓冲区
         * @param[in] x, y  窗口在屏幕的偏移
         * @param[in] width, height 窗口大小
         */
        void Init(int* pargc, char** pargv,
            unsigned int mode = GLUT_RGBA | GLUT_SINGLE,
            int x = 0, int y = 0, int width = 640, int height = 480);

        /**
         * @brief 实现glut回调注册
         */
        void RegisterCallbackFunc(GlutCallbackFunc func)
        {
            func();
        }

        void MainLoop()
        {
            glutMainLoop();
        }

    private:
        std::string m_title;
};

#endif